Context
In this exercise we are going to study the results from a particle analysis performed on a set of SEM images of Ni nanoparticles.
To obtain these nanoparticles, we start from Si wafers on which a 5 or 10 nm layer of Ni is deposited by PVD. These wafers are then heated in an H2 atmosphere to reduce them, which provokes the formation of nanoparticles through unwetting of the Si surface. These nanoparticles are then used as catalyst for the growth of vertically aligned carbon nanotubes by PECVD. As the diameter and density of the tubes are directly related to the diameter and density of the nanoparticles, we are interested in getting a clear idea of these parameters before performing the nanotube growth.
Some Ni-covered Si wafers were prepared before the first confinement (substrates labeled as old), some were prepared in September (new substrates). Here, we are interested in seeing whether the age and thickness of the Ni layer plays a role on the nanoparticles size and density. Also, the other parameters to study are the temperature at which the unwetting is performed, as well as the duration of this reaction.
To perform this study, we prepared samples from various substrates at various temperatures and during various times. The substrates are then observed with SEM, and several pictures are taken to increase the statistics. These pictures are then analyzed with ImageJ, as shown on Figure 1.1.
In this exercise, we are going to treat the tables obtained from ImageJ: these tables contain the (x,y) positions of the particles as well as their area.
LS0tCnRpdGxlIDogIlIgRXhlcmNpc2VzIC0gUGFydGljbGUgYW5hbHlzaXMgZnJvbSBTRU0gaW1hZ2VzIgpkYXRlICA6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OiAKICAgIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgICAgICB0b2MgICAgICAgICAgICA6IFRSVUUKICAgICAgICB0b2NfZmxvYXQgICAgICA6IFRSVUUKICAgICAgICB0b2NfZGVwdGggICAgICA6IDQKICAgICAgICBoaWdobGlnaHQgICAgICA6IHRhbmdvCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiBUUlVFCiAgICAgICAgY29kZV9kb3dubG9hZCAgOiBUUlVFCnBhcmFtczogCiAgICBzb2x1dGlvbjoKICAgICAgICB2YWx1ZTogRkFMU0UKLS0tCgoKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYmxvY2txdW90ZSB7CiAgYmFja2dyb3VuZDogI0U5RjlGRjsKICBib3JkZXItbGVmdDogNXB4IHNvbGlkICMwMjYwODY7CiAgbWFyZ2luOiAxLjVlbSAxMHB4OwogIHBhZGRpbmc6IDAuNWVtIDEwcHg7CiAgZm9udC1zaXplOiAxZW07Cn0KPC9zdHlsZT4KCiMgQ29udGV4dAoKSW4gdGhpcyBleGVyY2lzZSB3ZSBhcmUgZ29pbmcgdG8gc3R1ZHkgdGhlIHJlc3VsdHMgZnJvbSBhIHBhcnRpY2xlIGFuYWx5c2lzIHBlcmZvcm1lZCBvbiBhIHNldCBvZiBTRU0gaW1hZ2VzIG9mIE5pIG5hbm9wYXJ0aWNsZXMuIAoKVG8gb2J0YWluIHRoZXNlIG5hbm9wYXJ0aWNsZXMsIHdlIHN0YXJ0IGZyb20gU2kgd2FmZXJzIG9uIHdoaWNoIGEgNSBvciAxMCBubSBsYXllciBvZiBOaSBpcyBkZXBvc2l0ZWQgYnkgUFZELiBUaGVzZSB3YWZlcnMgYXJlIHRoZW4gaGVhdGVkIGluIGFuIEh+Mn4gYXRtb3NwaGVyZSB0byByZWR1Y2UgdGhlbSwgd2hpY2ggcHJvdm9rZXMgdGhlIGZvcm1hdGlvbiBvZiBuYW5vcGFydGljbGVzIHRocm91Z2ggdW53ZXR0aW5nIG9mIHRoZSBTaSBzdXJmYWNlLiBUaGVzZSBuYW5vcGFydGljbGVzIGFyZSB0aGVuIHVzZWQgYXMgY2F0YWx5c3QgZm9yIHRoZSBncm93dGggb2YgdmVydGljYWxseSBhbGlnbmVkIGNhcmJvbiBuYW5vdHViZXMgYnkgUEVDVkQuIEFzIHRoZSBkaWFtZXRlciBhbmQgZGVuc2l0eSBvZiB0aGUgdHViZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRpYW1ldGVyIGFuZCBkZW5zaXR5IG9mIHRoZSBuYW5vcGFydGljbGVzLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIGEgY2xlYXIgaWRlYSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBuYW5vdHViZSBncm93dGguCgpTb21lIE5pLWNvdmVyZWQgU2kgd2FmZXJzIHdlcmUgcHJlcGFyZWQgYmVmb3JlIHRoZSBmaXJzdCBjb25maW5lbWVudCAoc3Vic3RyYXRlcyBsYWJlbGVkIGFzIGBvbGRgKSwgc29tZSB3ZXJlIHByZXBhcmVkIGluIFNlcHRlbWJlciAoYG5ld2Agc3Vic3RyYXRlcykuIEhlcmUsIHdlIGFyZSBpbnRlcmVzdGVkIGluIHNlZWluZyB3aGV0aGVyIHRoZSBhZ2UgYW5kIHRoaWNrbmVzcyBvZiB0aGUgTmkgbGF5ZXIgcGxheXMgYSByb2xlIG9uIHRoZSBuYW5vcGFydGljbGVzIHNpemUgYW5kIGRlbnNpdHkuIEFsc28sIHRoZSBvdGhlciBwYXJhbWV0ZXJzIHRvIHN0dWR5IGFyZSB0aGUgdGVtcGVyYXR1cmUgYXQgd2hpY2ggdGhlIHVud2V0dGluZyBpcyBwZXJmb3JtZWQsIGFzIHdlbGwgYXMgdGhlIGR1cmF0aW9uIG9mIHRoaXMgcmVhY3Rpb24uCgpUbyBwZXJmb3JtIHRoaXMgc3R1ZHksIHdlIHByZXBhcmVkIHNhbXBsZXMgZnJvbSB2YXJpb3VzIHN1YnN0cmF0ZXMgYXQgdmFyaW91cyB0ZW1wZXJhdHVyZXMgYW5kIGR1cmluZyB2YXJpb3VzIHRpbWVzLiBUaGUgc3Vic3RyYXRlcyBhcmUgdGhlbiBvYnNlcnZlZCB3aXRoIFNFTSwgYW5kIHNldmVyYWwgcGljdHVyZXMgYXJlIHRha2VuIHRvIGluY3JlYXNlIHRoZSBzdGF0aXN0aWNzLiBUaGVzZSBwaWN0dXJlcyBhcmUgdGhlbiBhbmFseXplZCB3aXRoIFtJbWFnZUpdKGh0dHBzOi8vaW1hZ2VqLm5ldC9XZWxjb21lKSwgYXMgc2hvd24gb24gRmlndXJlIFxAcmVmKGZpZzpTRU1pbWFnZXMpLiAKCmBgYHtyIFNFTWltYWdlcywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZmlnLmNhcD0iVHlwaWNhbCBTRU0gaW1hZ2Ugb2YgTmkgbmFub3BhcnRpY2xlczogZnJvbSB0aGUgcmF3IGltYWdlIHRvIHBhcnRpY2xlIGFuYWx5c2lzIiwgZmlnLmFsaWduPSJjZW50ZXIiLCBvdXQud2lkdGg9IjMzJSIsIGZpZy5zaG93PSdob2xkJ30KbXlpbWFnZXMgPC0gYygiRGF0YV9TRU0vTUwyNl8wMS5wbmciLCAiRGF0YV9TRU0vTUwyNl8wMS10aHJlc2hvbGQucG5nIiwgIkRhdGFfU0VNL01MMjZfMDEtcGFydGljbGVzLnBuZyIpCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKG15aW1hZ2VzKQpgYGAKCkluIHRoaXMgZXhlcmNpc2UsIHdlIGFyZSBnb2luZyB0byB0cmVhdCB0aGUgdGFibGVzIG9idGFpbmVkIGZyb20gSW1hZ2VKOiB0aGVzZSB0YWJsZXMgY29udGFpbiB0aGUgKHgseSkgcG9zaXRpb25zIG9mIHRoZSBwYXJ0aWNsZXMgYXMgd2VsbCBhcyB0aGVpciBhcmVhLgoKIyBEYXRhIHdyYW5nbGluZwoKLSBMb2FkIHRoZSBwYWNrYWdlcyBgdGlkeXZlcnNlYCwgYHJlYWR4bGAsIGB1bml0c2AsIGBicm9vbWAsIGFuZCBgZ2dmb3JjZWAuIFdlIGFyZSBnb2luZyB0byBnZXR0aW5nIHVzZWQgdG8gd29yayB3aXRoIHVuaXRzIGluIHRoaXMgZXhlcmNpc2UsIHdoaWNoIGlzIGEgdmVyeSBnb29kIGhhYml0IHRvIHRha2UgaW4gb3JkZXIgdG8gYXZvaWQgbWFueSB1bml0IGNvbnZlcnNpb24gcHJvYmxlbXMuIFRoZSBwYWNrYWdlIGBnZ2ZvcmNlYCBhbGxvd3MgZG9pbmcgYGdncGxvdGAgcGxvdHMgd2l0aCB0aWJibGVzIGNvbnRhaW5pbmcgdW5pdHMuIFNldCB0aGUgZ2xvYmFsIGBnZ3Bsb3QyYCB0aGVtZSB0byBibGFjayBhbmQgd2hpdGUuIEFsc28sIG1ha2UgaXQgc28gdGhhdCB0aGUgYHN0cmlwLmJhY2tncm91bmRgIChiYWNrZ3JvdW5kIG9mIHRoZSBmYWNldHMgdGl0bGVzKSBpcyBibGFuaywgYW5kIHRoYXQgdGhlIGBzdHJpcC50ZXh0YCBpcyBib2xkLgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KHVuaXRzKQpsaWJyYXJ5KGdnZm9yY2UpCmxpYnJhcnkoYnJvb20pCnRoZW1lX3NldCh0aGVtZV9idygpKwogICAgICAgICAgdGhlbWUoc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgIHN0cmlwLnRleHQ9ZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemU9MTQpCiAgICAgICAgICAgICAgICApKQpgYGAKCi0gRmluZCBhbGwgY3N2IGZpbGVzIGluIHRoZSBgRGF0YV9TRU1gIGZvbGRlciBhbmQgc3RvcmUgdGhlbSBpbiBgZmxpc3RgLgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KZmxpc3QgPC0gbGlzdC5maWxlcyhwYXRoPSJEYXRhX1NFTSIsIHBhdHRlcm49Ii5jc3YiKQpgYGAKCi0gUmVhZCB0aGUgYHNhbXBsZS54bHN4YCBmaWxlIHRoYXQgY29udGFpbiBhbGwgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSB2YXJpb3VzIHNhbXBsZXMsIHN1Y2ggYXMgdGhlaXIgdGVtcGVyYXR1cmUsIHN1YnN0cmF0ZSB0eXBlLCB0aW1lIG9mIHJlYWN0aW9uLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBgc2FtcGxlc2AuIAogICAgLSBNb2RpZnkgdGhlIHRpYmJsZSBgc2FtcGxlc2Agc28gdGhhdCBpdHMgY29sdW1ucyBhcmUgbmFtZWQgInNhbXBsZSIsICJUIiwgInRpbWUiLCBhbmQgInN1YnN0cmF0ZSIKICAgIC0gVXNpbmcgYHNlcGFyYXRlKClgey5SfSwgc2VwYXJhdGUgdGhlICJzdWJzdHJhdGUiIGNvbHVtbiBpbnRvICJzdWJfdGhpY2siIGFuZCAic3ViX2FnZSIgY29udGFpbmluZyB0aGUgdGhpY2tuZXNzIGFuZCBhZ2Ugb2YgdGhlIHN1YnN0cmF0ZS4gVXNlIGBjb252ZXJ0ID0gVFJVRWAgdG8gY29udmVydCB0aGUgY2hhcmFjdGVycyB0byBpbnRlZ2VycyBpZiBhcHBsaWNhYmxlLgogICAgLSBHaXZlIHRoZSBjb2x1bW5zIHRoZWlyIHByb3BlciB1bml0IHdoZW4gYXBwbGljYWJsZSAocmVmZXIgdG8gW3RoaXMgZXhhbXBsZV0oaHR0cHM6Ly9sbWkuY25ycy5mci9yL3dvcmtpbmctd2l0aC11bml0cy5odG1sKSkKCmBgYHtyIGluY2x1ZGU9cGFyYW1zJHNvbHV0aW9uLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnNhbXBsZXMgPC0gcmVhZF9leGNlbCgiRGF0YV9TRU0vc2FtcGxlLnhsc3giKSAlPiUgCiAgICByZW5hbWUoc2FtcGxlICAgID0gIm5hbWUiLAogICAgICAgICAgIFQgICAgICAgICA9ICJUZW1wZXJhdHVyZSAowrBDKSIsCiAgICAgICAgICAgdGltZSAgICAgID0gIlRpbWUgKG1pbnV0ZXMpIiwKICAgICAgICAgICBzdWJzdHJhdGUgPSAiU3Vic3RyYXRlIChubSkiKSAlPiUgCiAgICBzZXBhcmF0ZShzdWJzdHJhdGUsIGMoInN1Yl90aGljayIsInN1Yl9hZ2UiKSwgY29udmVydCA9IFRSVUUpICU+JSAKICAgIG11dGF0ZShzdWJfdGhpY2sgPSBzZXRfdW5pdHMoc3ViX3RoaWNrLCJubSIpLAogICAgICAgICAgIHRpbWUgICAgICA9IHNldF91bml0cyh0aW1lLCJtaW4iKSwKICAgICAgICAgICBUICAgICAgICAgPSBzZXRfdW5pdHMoVCwiZGVnQyIpCiAgICAgICAgICAgKQpgYGAKCi0gQ3JlYXRlIHRoZSBgcmVhZGZpbGUoZmlsZW5hbWUpYHsuUn0gZnVuY3Rpb24gdGhhdCwgZ2l2ZW4gb25lIG9mIHRoZSBjc3YgZmlsZXMgbmFtZXMsIHdpbGw6CiAgICAtIERldGVybWluZSB0aGUgdW5pdCB1c2VkIGluIHRoaXMgZmlsZTogZnJvbSBgZmlsZW5hbWVgLCBzdG9yZSB0aGUgdW5pdCBpbnRvIHRoZSB2YXJpYWJsZSBgVU5JVGAgKHRoYXQgc2hvdWxkIGJlIHRoZSBzdHJpbmcgYCJ1bSJgIG9yIGAibm0iYCkuIFlvdSBjYW4gdXNlIGB1bmxpc3Qoc3Ryc3BsaXQoZmlsZW5hbWUsIl8iKSlgey5SfSB0byBnZXQgYSB2ZWN0b3Igb2YgdGhlIGVsZW1lbnRzIG9mIGBmaWxlbmFtZWAgc2VwYXJhdGVkIGJ5IGEgYF9gIGNoYXJhY3Rlci4KICAgIC0gUmVhZCB0aGUgY3N2IGZpbGUsIHRoZW4gc3VjY2Vzc2l2ZWx5OgogICAgLSBTZWxlY3Qgb25seSB0aGUgWCwgWSBhbmQgQXJlYSBjb2x1bW5zIChzb21lIGZpbGVzIGhhdmUgbW9yZSBjb2x1bW5zKSBhbmQgcmVuYW1lIHRoZW0gdG8gbG93ZXJjYXNlcyBuYW1lcy4KICAgIC0gQWRkIHRoZSBgZmlsZWAgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGZpbGVuYW1lLCBhbmQgdGhlbiBzZXBhcmF0ZSBpdCBpbnRvIDMgY29sdW1ucyBgc2FtcGxlYCwgYG51bWJlcmAgYW5kIGB1bml0YAogICAgLSBSZW1vdmUgdGhlIGB1bml0YCBjb2x1bW4KICAgIC0gQXBwbHkgdGhlIGNvcnJlc3BvbmRpbmcgdW5pdHMgdG8geCwgeSBhbmQgYXJlYS4gWW91IGNhbiBhcHBseSBhIHVuaXQgdG8gYSB2ZWN0b3IgYHhgIGJhc2VkIG9uIGEgKipzdHJpbmcqKiBgeHhgIHVzaW5nIGBzZXRfdW5pdHMoeCwgeHgsIG1vZGUgPSAic3RhbmRhcmQiKWB7LlJ9LgogICAgLSBDcmVhdGUgYSBjb2x1bW4gYGRpYW1ldGVyYCBjb250YWluaW5nIHRoZSBkaWFtZXRlciBvZiB0aGUgcGFydGljbGVzLgotIFRlc3QgdGhpcyBmdW5jdGlvbiBvbiAyIGZpbGVzIHdpdGggMiBkaWZmZXJlbnQgdW5pdHMgdG8gY2hlY2sgdGhhdCBpdCBnaXZlcyB0aGUgZXhwZWN0ZWQgcmVzdWx0LgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KcmVhZGZpbGUgPC0gZnVuY3Rpb24oZmlsZW5hbWUpewogICAgVU5JVCA8LSB1bmxpc3Qoc3Ryc3BsaXQoZmlsZW5hbWUsIl8iKSkKICAgIFVOSVQgPC0gZ3N1YigiLmNzdiIsIiIsVU5JVFtsZW5ndGgoVU5JVCldKQogICAgcmVhZF9jc3YoZmlsZW5hbWUpICU+JSAKICAgICAgICBzZWxlY3QoWCxZLEFyZWEpICU+JSAKICAgICAgICByZW5hbWUoeD0iWCIseT0iWSIsYXJlYT0iQXJlYSIpICU+JSAKICAgICAgICBtdXRhdGUoZmlsZT1nc3ViKCJEYXRhX1NFTS8iLCIiLGZpbGVuYW1lKSkgJT4lIAogICAgICAgIHNlcGFyYXRlKGZpbGUsIGMoInNhbXBsZSIsIm51bWJlciIsInVuaXQiKSwgc2VwPSJfIikgJT4lIAogICAgICAgIHNlbGVjdCgtdW5pdCkgJT4lIAogICAgICAgIG11dGF0ZSh4ICAgICAgICA9IHNldF91bml0cyh4LCBVTklULCBtb2RlID0gInN0YW5kYXJkIiksCiAgICAgICAgICAgICAgIHkgICAgICAgID0gc2V0X3VuaXRzKHksIFVOSVQsIG1vZGUgPSAic3RhbmRhcmQiKSwKICAgICAgICAgICAgICAgYXJlYSAgICAgPSBzZXRfdW5pdHMoYXJlYSwgcGFzdGUwKFVOSVQsIioiLFVOSVQpLCBtb2RlID0gInN0YW5kYXJkIiksCiAgICAgICAgICAgICAgIGRpYW1ldGVyID0gc3FydCg0KmFyZWEvcGkpKQp9CnJlYWRmaWxlKCJEYXRhX1NFTS9NTDE2XzAyX3VtLmNzdiIpCnJlYWRmaWxlKCJEYXRhX1NFTS9NTDE2XzA0X25tLmNzdiIpCmBgYAoKLSBVc2luZyBgcmVhZGZpbGUoKWB7LlJ9IHRoYXQgeW91IGp1c3QgZGVmaW5lZCwgcmVhZCBhbGwgY3N2IGZpbGVzIGFuZCBzdG9yZSB0aGVtIGludG8gYSB0aWR5IHRpYmJsZSBjYWxsZWQgYHBhcnRpY2xlc2AuICoqRG8gbm90IHVzZSBhIGZvciBsb29wIHRvIGRvIHNvLioqIEpvaW4gdGhpcyB0YWJsZSB3aXRoIHRoZSBgc2FtcGxlc2Agb25lLiBZb3Ugd2lsbCBzZWUgdGhhdCwgc2luY2Ugd2UgYXR0cmlidXRlZCB1bml0cyB0byBzb21lIGNvbHVtbnMsIGFsbCBkYXRhIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhIHNpbmdsZSB1bml0LgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KcGFydGljbGVzIDwtIHRpYmJsZShmaWxlPWZsaXN0KSAlPiUgCiAgICBtdXRhdGUoZGF0YSA9IG1hcChmaWxlLCB+cmVhZGZpbGUoZmlsZS5wYXRoKCJEYXRhX1NFTSIsLikpKSkgJT4lIAogICAgdW5uZXN0KGRhdGEpICU+JSAKICAgIGlubmVyX2pvaW4oc2FtcGxlcykKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0V9CndyaXRlX3RzdihwYXJ0aWNsZXMsICJEYXRhX1NFTS9wYXJ0aWNsZXMuZGF0IikKYGBgCgo+IEluIGNhc2UgeW91IGRpZG4ndCBtYW5hZ2UgdG8gZ2V0IHRoZXJlLCBbaGVyZV0oRGF0YV9TRU0vcGFydGljbGVzLnRzdikgaXMgdGhlIGBwYXJ0aWNsZXNgIHRpYmJsZSAoaXQgZG9lc24ndCBjb250YWluIHRoZSB1bml0cyB0aG91Z2ggYXMgeW91IGNhbid0IHNhdmUgaXQgaW4gYSB0ZXh0IGZpbGUuKQoKCiMgUGxvdHRpbmcgYW5kIGFuYWx5c2lzCgojIyBTaXplIGFuYWx5c2lzCgotIE5vdywgcGxvdCB0aGUgaGlzdG9ncmFtIG9mIGFsbCBwYXJ0aWNsZSBkaWFtZXRlcnMsIHdpdGggYSBmaWxsIGNvbG9yIGRlcGVuZGluZyBvbiB0aGUgdGltZSAoeW91IG5lZWQgdG8gY29udmVydCB0aW1lIHRvIGEgZmFjdG9yKSwgYW5kIHdpdGggYSBncmlkIHNob3dpbmcgc3Vic3RyYXRlIGFnZSB2cyBzdWJzdHJhdGUgdGhpY2tuZXNzICh0aGlja25lc3Mgb24gdGhlIGNvbHVtbnMpLiBQdXQgdGhlIGxlZ2VuZCBvbiB0b3Agb2YgdGhlIGdyYXBoLCBhbmQgYWRkIHNvbWUgdHJhbnNwYXJlbmN5IHRvIHlvdXIgY29sb3JzLgotIEluIGZhY3QsIEkgdXN1YWxseSBwcmVmZXIgdG8gcGxvdCBpdCB1c2luZyBgZ2VvbV9kZW5zaXR5KClgey5SfSB3aGljaCBpcyBiYXNpY2FsbHkgYW4gaGlzdG9ncmFtIGNvbnZvbHV0ZWQgd2l0aCBhIEdhdXNzaWFuIGRpc3RyaWJ1dGlvbiBvZiBiYW5kd2lkdGggYGJ3YC4gVGhpcyBhbGxvd3MgZm9yIHNtb290aGVyIGdyYXBocy4gTWFrZSB0aGlzIHBsb3QgYW5kIHBsYXkgd2l0aCB0aGUgYGJ3YCBwYXJhbWV0ZXIuCi0gQ29udmVydCAtLSAqd2l0aCBnZ3Bsb3QqIC0tIHRoZSB1bml0IG9mIHRoZSBwYXJ0aWNsZSBkaWFtZXRlcnMgdG8gbmFub21ldGVycyBvciBhbnkgb3RoZXIgdW5pdCB5b3Ugd2FudC4KCmBgYHtyIGluY2x1ZGU9cGFyYW1zJHNvbHV0aW9uLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnBhcnRpY2xlcyAlPiUgCiAgICBnZ3Bsb3QoYWVzKHg9ZGlhbWV0ZXIsIGZpbGw9ZmFjdG9yKHRpbWUpKSkrCiAgICAgICAgZ2VvbV9kZW5zaXR5KGFscGhhPS41LCBjb2xvcj1OQSwgYnc9NCkrCiAgICAgICAgbGFicyh4ICAgID0gImBQYXJ0aWNsZSBEaWFtZXRlcmAiLAogICAgICAgICAgICAgeSAgICA9ICJEZW5zaXR5IFthcmIuIHVuaXRzXSIsCiAgICAgICAgICAgICBmaWxsID0gIlRpbWUgW21pbl0iKSsKICAgICAgICBmYWNldF9ncmlkKHN1Yl9hZ2V+c3ViX3RoaWNrLCBzY2FsZXM9ImZyZWVfeSIpKwogICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSsKICAgICAgICBzY2FsZV94X3VuaXQodW5pdD0ibm0iKQpgYGAKCi0gTm93LCBzdG9yZSBpbiBgcGFydGljbGVzX2F2ZWAgdGhlIGF2ZXJhZ2UgcGFydGljbGUgZGlhbWV0ZXIgYW5kIGl0cyBzdGFuZGFyZCBkZXZpYXRpb24gcGVyIHN1YnN0cmF0ZSB0aGlja25lc3MgYW5kIGFnZSwgdGltZSBhbmQgdGVtcGVyYXR1cmUgb2YgcmVhY3Rpb24uIFlvdSB3aWxsIG5vdGUgdGhhdCBgbWVhbigpYHsuUn0ga2VlcHMgdGhlIHVuaXQgb2YgdmVjdG9ycyB3aGlsZSBgc2QoKWB7LlJ9IGxvc2VzIGl0LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGNvbHVtbiBoYXMgdGhlIHByb3BlciB1bml0ICh1c2UgYHVuaXRzKGEpIDwtIHVuaXRzKGIpYHsuUn0pLgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KcGFydGljbGVzX2F2ZSA8LSBwYXJ0aWNsZXMgJT4lIAogICAgZ3JvdXBfYnkoc3ViX3RoaWNrLCBzdWJfYWdlLCB0aW1lLCBUKSAlPiUgCiAgICBzdW1tYXJpc2UoZGlhbSAgID0gbWVhbihkaWFtZXRlciksCiAgICAgICAgICAgICAgc2RkaWFtID0gc2QoZGlhbWV0ZXIpCiAgICAgICAgICAgICAgKQp1bml0cyhwYXJ0aWNsZXNfYXZlJHNkZGlhbSkgPC0gdW5pdHMocGFydGljbGVzX2F2ZSRkaWFtKQpgYGAKCi0gUGxvdCB0aGUgYXZlcmFnZSBkaWFtZXRlciBldm9sdXRpb24gd2l0aCByZWFjdGlvbiB0aW1lLCB3aXRoIGEgY29sb3IgcGVyIHN1YnN0cmF0ZSB0aGlja25lc3MsIGFuZCBvbiBhIGdyaWQgc2hvd2luZyBzdWJzdHJhdGUgYWdlIHZzIHRlbXBlcmF0dXJlLgogICAgLSBEb24ndCBmb3JnZXQgdG8gYWRkIGVycm9yIGJhcnMgY29ycmVzcG9uZGluZyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgdGhlIGRpYW1ldGVycyBkaXN0cmlidXRpb24uCiAgICAtIEFkZCBhIGxpbmUgc2hvd2luZyBhIGxpbmVhciBmaXQgZm9yIGFsbCBncm91cHMuIAogICAgLSBNYWtlIHN1cmUgYm90aCBwbG90IGF4ZXMgZ28gdG8gMC4gCiAgICAtIFB1dCB0aGUgbGVnZW5kIG9uIHRvcC4KICAgIC0gRGVmaW5lIG5pY2UgYXhpcyBsYWJlbHMgKHdpdGggc2VudGVuY2VzIGluc3RlYWQgb2YgY29sdW1uIG5hbWVzKS4gSW4gY2FzZSBhIGNvbHVtbiBoYXMgYSB1bml0IHRoYXQgd2FzIGF0dHJpYnV0ZWQsIGl0IHdpbGwgcmV0dXJuIGFuIGVycm9yIGluIGNhc2UgdGhlIGF4aXMgbGFiZWwgeW91IHdhbnQgdG8gZ2l2ZSBjb250YWlucyB3aGl0ZSBzcGFjZXMuIFlvdSB3aWxsIHRodXMgbmVlZCB0byB1c2UgYmFja3RpY2tzLCBsaWtlIHNvOiBgYCJgVHdvIHdvcmRzYCJgYAoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KcGFydGljbGVzX2F2ZSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHg9dGltZSwgeT1kaWFtLCBjb2xvcj1mYWN0b3Ioc3ViX3RoaWNrKSkpKwogICAgICAgIGdlb21fcG9pbnQoYWxwaGE9LjUpKwogICAgICAgIGV4cGFuZF9saW1pdHMoeCA9IDAsIHk9MCkrCiAgICAgICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1kaWFtLXNkZGlhbSx5bWF4PWRpYW0rc2RkaWFtKSwgd2lkdGg9LjIpKwogICAgICAgIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLCBzZT1GQUxTRSwgKSsKICAgICAgICBmYWNldF9ncmlkKFR+c3ViX2FnZSkrCiAgICAgICAgbGFicyh4ICAgICA9ICJUaW1lIiwKICAgICAgICAgICAgIHkgICAgID0gImBBdmVyYWdlIHBhcnRpY2xlIGRpYW1ldGVyYCIsCiAgICAgICAgICAgICBjb2xvciA9ICJTdWJzdHJhdGUgdGhpY2tuZXNzIikrCiAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpKwogICAgICAgIHNjYWxlX3lfdW5pdCh1bml0PSJubSIpCmBgYAoKLSBVc2luZyBgYnJvb21gIGRpc3BsYXkgdGhlIHNsb3BlcyBhbmQgaW50ZXJjZXB0IG9mIGFsbCBsaW5lYXIgZml0cywgKip3aXRob3V0IHVzaW5nIGEgZm9yIGxvb3AqKi4gVGhpcyBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIHVuaXRzLCBzbyBwcmlvciB0byBkb2luZyB0aGUgZml0LCByZW1vdmUgdGhlIHVuaXRzIG9mIHlvdXIgdGltZSBhbmQgZGlhbWV0ZXIgY29sdW1ucyB1c2luZyBgYXMudmVjdG9yKClgey5SfS4KCmBgYHtyIGluY2x1ZGU9cGFyYW1zJHNvbHV0aW9uLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnBhcnRpY2xlc19hdmUgJT4lIAogICAgbXV0YXRlKGRpYW0gICA9IGFzLnZlY3RvcihzZXRfdW5pdHMoZGlhbSwibm0iKSksCiAgICAgICAgICAgc2RkaWFtID0gYXMudmVjdG9yKHNldF91bml0cyhzZGRpYW0sIm5tIikpLAogICAgICAgICAgIHRpbWUgICA9IGFzLnZlY3Rvcih0aW1lKQogICAgICAgICAgICkgJT4lIAogICAgbmVzdChkYXRhPS1jKHN1Yl90aGljayxzdWJfYWdlLFQpKSAlPiUgCiAgICBtdXRhdGUoZml0ICAgID0gbWFwKGRhdGEsIH5sbShkYXRhPS4sIGRpYW1+dGltZSwgd2VpZ2h0cyA9IDEvc2RkaWFtKSksCiAgICAgICAgICAgdGlkaWVkID0gbWFwKGZpdCwgdGlkeSkpICU+JSAKICAgIHVubmVzdCh0aWRpZWQpICU+JSAKICAgIHNlbGVjdChzdWJfdGhpY2ssc3ViX2FnZSxULHRlcm0sZXN0aW1hdGUpCmBgYAoKIyMgRGVuc2l0eSBhbmQgb3JkZXJpbmcgYW5hbHlzaXMKCi0gTm93IHdlIHdhbnQgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhlIGRlbnNpdHkgb2YgcGFydGljbGVzIGFuZCB0aGVpciBvcmRlcmluZy4gT25lIHdheSBvZiBkb2luZyB0aGlzIGlzIHRvIGxvb2sgYXQgdGhlICpHKHIpKiBkaXN0cmlidXRpb24sICppLmUuKiB0aGUgcHJvYmFiaWxpdHkgdG8gZmluZCBhIHBhcnRpY2xlIGluICpyKiBpZiBvbmUgaXMgaW4gMC4gSSBwcm92aWRlIGhlcmUgYmVsb3cgdGhlIGZ1bmN0aW9uIGBnb2ZyKHgseSxkcixSbWF4KWB7LlJ9IHRoYXQgY29tcHV0ZXMgaXQgYmV0d2VlbiBgMGAgYW5kIGBSbWF4YCB3aXRoIGEgc3RlcCBgZHJgLCBwcm92aWRlZCB0aGUgKHgseSkgcG9zaXRpb25zIG9mIHBhcnRpY2xlcy4KCmBgYHtyIGluY2x1ZGU9VFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFfQpnb2ZyIDwtIGZ1bmN0aW9uKHgsIHksIGRyPS4yLCBSbWF4PTEwKXsKICAgICMgTWFrZSBzdXJlIHVuaXRzIGFyZSB1bmlmb3JtIGJlZm9yZSB1c2luZyBkaXN0KCkKICAgIHVuaXRzKHkpIDwtIHVuaXRzKHgpIAogICAgIyBkciBhbmQgUm1heCBhcmUgdW5pdGxlc3MgYnV0IHNob3VsZCBiZSBnaXZlbiBpbiB0aGUgc2FtZSB1bml0cyBhcyB4CiAgICBkciAgIDwtIGFzLnZlY3RvcihkcikKICAgIFJtYXggPC0gYXMudmVjdG9yKFJtYXgpCiAgICAjIEdldCBhIHZlY3RvciBvZiBhbGwgRXVjbGlkaWFuIGRpc3RhbmNlcwogICAgZGQgICA8LSBhcy52ZWN0b3IoZGlzdCh0aWJibGU6OnRpYmJsZSh4LHkpKSkKICAgICMgTWFrZSBhIGhpc3RvZ3JhbSBvdXQgb2YgaXQKICAgIGRkLmhpc3QgPC0gaGlzdChkZCwgCiAgICAgICAgICAgICAgICAgICAgYnJlYWtzPXNlcSgwLCBtYXgoZGQpK2RyLCBieT1kciksCiAgICAgICAgICAgICAgICAgICAgcGxvdD1GQUxTRSkKICAgICMgR2V0IHRoZSByIHZhbHVlcwogICAgciA8LSBkZC5oaXN0JG1pZHMKICAgICMgQ29tcHV0ZSB0aGUgbm9ybWFsaXphdGlvbiBieSB0aGUgc3VyZmFjZSBvZiB0aGUgCiAgICAjIHJpbmcgb2YgcmFkaXVzIHIgYW5kIHRoaWNrbmVzcyBkcgogICAgcmxvICA8LSByIC0gZHIvMgogICAgcnVwICA8LSByICsgZHIvMgogICAgcmluZyA8LSBwaSoocnVwXjIgLSBybG9eMikKICAgICMgUmV0dXJuIHRoZSB0aWJibGUgY29udGFpbmluZyByIGFuZCBHKHIpIHdpdGggdGhlIHNhbWUgdW5pdCBhcyB4CiAgICAjIE9ubHkgZGF0YSBmb3IgcjxSbWF4IGlzIHdhbnRlZCwgYW5kIHdlIHJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCB0b28KICAgIGQgPC0gdGliYmxlOjp0aWJibGUoUiAgICA9IHJbcjxSbWF4XSwgCiAgICAgICAgICAgICAgICAgICAgICAgIEdvZlIgPSBkZC5oaXN0JGNvdW50c1tyPFJtYXhdL3JpbmdbcjxSbWF4XSkgJT4lIAogICAgICAgICAgICByZW5hbWUocj0iUiIsZ29mcj0iR29mUiIpCiAgICB1bml0cyhkJHIpIDwtIHVuaXRzKHgpCiAgICBkWy0xLF0KfQpgYGAKCi0gVXNpbmcgcGlwZSBvcGVyYXRpb25zLCBjb21wdXRlIEcocikgZm9yIGVhY2ggaW1hZ2UgYW5kIHN0b3JlIGl0IGludG8gYHBhcnRpY2xlc19nb2ZyYC4gCiAgICAtIFdlIHdhbnQgdG8gY29tcHV0ZSBHKHIpIHVwIHRvIDUwMCBubSBieSBzdGVwIG9mIDIgbm0uIE1ha2Ugc3VyZSB4LCB5LCBkciBhbmQgUm1heCBhcmUgZ2l2ZW4gd2l0aCB0aGUgc2FtZSB1bml0LgogICAgLSBUaGVuLCBjb21wdXRlIHRoZSBhdmVyYWdlIEcocikgZm9yIGVhY2ggc2FtcGxlLgogICAgLSBKb2luIGBwYXJ0aWNsZXNfZ29mcmAgd2l0aCBgc2FtcGxlc2AgdG8gcmV0cmlldmUgdGhlIHNhbXBsZXMgaW5mb3JtYXRpb24KCmBgYHtyIGluY2x1ZGU9cGFyYW1zJHNvbHV0aW9uLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnBhcnRpY2xlc19nb2ZyIDwtIHBhcnRpY2xlcyAlPiUgCiAgICBtdXRhdGUoeCA9IHNldF91bml0cyh4LCJubSIpLAogICAgICAgICAgIHkgPSBzZXRfdW5pdHMoeSwibm0iKQogICAgICAgICAgICkgJT4lIAogICAgbmVzdChkYXRhID0gLWMoc2FtcGxlLCBudW1iZXIpKSAlPiUgCiAgICBtdXRhdGUoR29mUiA9IG1hcChkYXRhLCB+Z29mciguJHgsIC4keSwgZHI9MiwgUm1heD01MDApKSkgJT4lIAogICAgdW5uZXN0KEdvZlIpICU+JSAKICAgIGdyb3VwX2J5KHNhbXBsZSwgcikgJT4lIAogICAgc3VtbWFyaXplKGdvZnI9bWVhbihnb2ZyKSkgJT4lIAogICAgaW5uZXJfam9pbihzYW1wbGVzKQpgYGAKCi0gRmluZCB0aGUgYmVzdCB3YXkgdG8gcmVwcmVzZW50IEcocikgZm9yIGFsbCBzYW1wbGVzLCB0aGF0IGFsbG93cyBzZWVpbmcgdGhlIGV2b2x1dGlvbiB3aXRoIGFsbCBwYXJhbWV0ZXJzLgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KcGFydGljbGVzX2dvZnIgJT4lIAogICAgZ2dwbG90KGFlcyh4PXIsIAogICAgICAgICAgICAgICB5PWdvZnIsIAogICAgICAgICAgICAgICBjb2xvcj1mYWN0b3IodGltZSkpKSsKICAgICAgICBnZW9tX3Ntb290aChtZXRob2Q9ImxvZXNzIiwgYWxwaGE9LjUsIHNwYW49LjE1LCBzZT1GQUxTRSkrCiAgICAgICAgZ2VvbV9saW5lKGFscGhhPS4yKSsKICAgICAgICBleHBhbmRfbGltaXRzKHggPSAwLCB5PTApKwogICAgICAgIGZhY2V0X2dyaWQocmVvcmRlcihwYXN0ZShULCJLIiksVCl+CiAgICAgICAgICAgICAgICAgICByZW9yZGVyKHBhc3RlKHN1Yl90aGljaywibm0gTmkgLSIsc3ViX2FnZSksc3ViX3RoaWNrKSwgCiAgICAgICAgICAgICAgICAgICBzY2FsZXM9ImZyZWVfeSIpKwogICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSsKICAgICAgICBsYWJzKHggICAgID0gInIiLAogICAgICAgICAgICAgeSAgICAgPSAiRyhyKSIsCiAgICAgICAgICAgICBjb2xvciA9ICJUaW1lIFttaW5dIikKYGBgCgoKCgoKCgo=